package com.aizuda.boot.modules.business.counterparty.service;

import com.aizuda.boot.modules.business.contract.dto.SingleResponse;
import com.aizuda.boot.modules.business.counterparty.entity.LegalEntityDetailEntity;
import com.aizuda.boot.modules.business.counterparty.entity.dto.CreateLegalInfoDTO;
import com.aizuda.boot.modules.business.counterparty.entity.dto.ExportDTO;
import com.aizuda.boot.modules.business.counterparty.entity.dto.LegalEntityQueryReqDTO;
import com.aizuda.boot.modules.business.counterparty.entity.dto.UpdateLegalInfoDTO;
import com.aizuda.boot.modules.business.counterparty.entity.vo.ChangeRecordVO;
import com.aizuda.boot.modules.business.counterparty.entity.vo.LegalEntityPageRespDTO;
import com.aizuda.boot.modules.business.counterparty.entity.vo.LegalVO;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 法人实体服务接口
 */
public interface LegalEntityService extends IService<LegalEntityDetailEntity> {
    
    /**
     * 获取所有启用的法人实体列表
     * @return 启用的法人实体列表
     */
    List<LegalEntityDetailEntity> getEnabledLegalEntities();
    
    /**
     * 根据ID获取法人实体（包含停用的）
     * @param id 法人实体ID
     * @return 法人实体信息
     */
    LegalEntityDetailEntity getLegalEntityById(Integer id);
    
    /**
     * 启用/停用法人实体
     * @param id 法人实体ID
     * @param enabled 是否启用
     * @return 是否成功
     */
    boolean toggleLegalEntityStatus(Integer id, Boolean enabled);
    
    /**
     * 分页查询法人实体列表
     * @param reqDTO 查询请求参数
     * @return 分页结果
     */
    LegalEntityPageRespDTO queryLegalEntitiesPage(LegalEntityQueryReqDTO reqDTO);

    /**
     * 新增法人
     * @param dto
     * @return
     */
    Boolean saveLegal(CreateLegalInfoDTO dto, HttpServletRequest request);

    /**
     * 修改法人
     * @param dto
     * @param request
     * @return
     */
    Boolean updateLegal(UpdateLegalInfoDTO dto, HttpServletRequest request);

    /**
     * 查询法人实体修改记录
     * @param legalId
     * @return
     */
    List<ChangeRecordVO> queryChangeRecords(Integer legalId);


    /**
     * 上传文件更新法人
     * @param file
     * @return
     */
    SingleResponse<Boolean> uploadCounterparty(MultipartFile file);

    /**
     * 获取所有法人
     * @return
     */
    List<LegalVO> getLegalEntityList();

    /**
     *  删除法人
     * @param legalId
     * @return
     */
    Boolean deleteLegal(Integer legalId);

    /**
     * 导出法人信息
     * @param dto
     * @param response
     */
    void exportLegalEntity(ExportDTO dto, HttpServletResponse response);
}